{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "# Veri Analizi Ajanı: Göz açıp kapayıncaya kadar verilerinizi analiz edin ✨\n",
        "Yazar: [Aymeric Roucher](https://huggingface.co/m-ric)\n",
        "\n",
        "Bu eğitim ileri düzey konular içermektedir. Bu eğitim içeriğinden önce Cookbook'ta yer alan [Ajan eğitimine](https://github.com/huggingface/cookbook/blob/main/notebooks/en/agents.ipynb) bakmanızı öneririz.\n",
        "\n",
        "Bu notebook ile bir veri analisti ajanı oluşturacağız: Veri analizi kütüphaneleri ile donatılmış ve Dataframelerden sonuçlar çıkartabilen ve bu sonuçları grafiklerle gösterebilen bir ajan.\n",
        "\n",
        "[Kaggle Titanic yarışmasındaki](https://www.kaggle.com/competitions/titanic) verileri analiz ederek yolcuların hayatta kalma olasılıklarını tahmin etmek istediğimizi düşünelim.\n",
        "\n",
        "Ama bu konuya başlamadan önce, otomatik bir ajanın trendleri çıkararak ve bazı grafikler çizerek analiz hazırlamasını istiyorum.\n",
        "\n",
        "Bu sistemi kuralım.\n",
        "\n",
        "Gerekli kütüphane gereksinimlerini yüklemek için aşağıdaki kodu çalıştıracağız:\n"
      ],
      "metadata": {
        "id": "pix5sPJeoiMA"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "!pip install seaborn \"transformers[agents]\""
      ],
      "metadata": {
        "id": "zK7vGRYCojql"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "İlk olarak `ReactCodeAgent` kullanarak bir ajan oluşturacağız. (Ajan türleri hakkında daha fazla bilgi edinmek için bu [dökümantasyonu](https://huggingface.co/docs/transformers/en/agents) okuyabilirsiniz.)\n",
        "\n",
        "ReactCodeAgent kodu doğrudan çalıştırabilir dolayısı ile herhangi farklı bir araç kullanmamıza gerek yoktur.\n",
        "\n",
        "Veri bilimiyle ilgili kütüphaneleri kullanmasına izin verdiğimizden emin olmak için `[\"numpy\", \"pandas\", \"matplotlib.pyplot\", \"seaborn\"]` kütüphanelerini `\"additional_authorized_imports\"` parametresi ile aktarıyoruz.\n",
        "\n",
        "Python yorumlayıcısı yalnızca çalışma ortamında yüklü kütüphaneleri kullanabilir. Bu sebeple `\"additional_authorized_imports\"` parametresine aktardığımız kütüphanelerin çalışma ortamınızda kurulu olduğundan emin olun.\n",
        "\n",
        "⚙ Ajanımızı, `HfEngine` sınıfı aracılığıyla HF'nin Inference API'sini kullanan [meta-llama/Meta-Llama-3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) modeliyle çalıştıracağız. Inference API, herhangi bir açık kaynak modelini hızlı ve kolay bir şekilde çalıştırmamıza olanak tanır.\n",
        "\n",
        "\n",
        "\n",
        "\n",
        "\n",
        "\n",
        "\n",
        "\n"
      ],
      "metadata": {
        "id": "ONR4fZmbrrnw"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from transformers.agents import HfEngine, ReactCodeAgent\n",
        "from huggingface_hub import login\n",
        "import os\n",
        "\n",
        "login(os.getenv(\"HUGGINGFACEHUB_API_TOKEN\"))\n",
        "\n",
        "llm_engine = HfEngine(\"meta-llama/Meta-Llama-3.1-70B-Instruct\")\n",
        "\n",
        "agent = ReactCodeAgent(\n",
        "    tools=[],\n",
        "    llm_engine=llm_engine,\n",
        "    additional_authorized_imports=[\"numpy\", \"pandas\", \"matplotlib.pyplot\", \"seaborn\"],\n",
        "    max_iterations=10,\n",
        ")"
      ],
      "metadata": {
        "id": "0zf6_TnHrdAk"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Veri analizi 📊🤔\n",
        "\n",
        "Yarışmadan alınan notları fonksiyona argüman olarak verelim ve ajanımızı `run` methodu ile çalıştıralım."
      ],
      "metadata": {
        "id": "DPOHaLM18sIW"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "import os\n",
        "\n",
        "os.mkdir(\"./figures\")"
      ],
      "metadata": {
        "id": "EC1R4pxvtheR"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "\"\"\"\n",
        "## Değişken notları\n",
        "pclass: Sosyo-ekonomik durumu (SES) temsil eden bir gösterge\n",
        "1.sınıf = Üst\n",
        "2.sınıf = Orta\n",
        "3.sınıf = Alt\n",
        "\n",
        "age: Yaş, 1'den küçükse kesirli bir değerdir. Eğer yaş tahmin ediliyorsa, xx.5 şeklindedir.\n",
        "\n",
        "sibsp: Veri seti aile ilişkilerini şu şekilde tanımlar...\n",
        "Kardeş = erkek kardeş, kız kardeş, üvey erkek kardeş, üvey kız kardeş, Eş = koca, karı (nişanlılar göz ardı edilmiştir)\n",
        "\n",
        "parch: Veri seti aile ilişkilerini şu şekilde tanımlar...\n",
        "Ebeveyn = anne, baba, Çocuk = kız, oğul, üvey kız, üvey oğul\n",
        "Bazı çocuklar yalnızca bir bakıcıyla seyahat ettikleri için, bu durumda parch=0'dır.\n",
        "\"\"\"\n",
        "additional_notes = \"\"\"\n",
        "### Variable Notes\n",
        "pclass: A proxy for socio-economic status (SES)\n",
        "1st = Upper\n",
        "2nd = Middle\n",
        "3rd = Lower\n",
        "age: Age is fractional if less than 1. If the age is estimated, is it in the form of xx.5\n",
        "sibsp: The dataset defines family relations in this way...\n",
        "Sibling = brother, sister, stepbrother, stepsister\n",
        "Spouse = husband, wife (mistresses and fiancés were ignored)\n",
        "parch: The dataset defines family relations in this way...\n",
        "Parent = mother, father\n",
        "Child = daughter, son, stepdaughter, stepson\n",
        "Some children travelled only with a nanny, therefore parch=0 for them.\n",
        "\"\"\"\n",
        "\n",
        "\"\"\"\n",
        "Sen bir veri analizi uzmanısın.\n",
        "Lütfen kaynak dosyasını yükle ve içeriğini analiz et.\n",
        "Elindeki değişkenlere göre, bu verilerle ilgili sorulabilecek 3 ilginç soru listele, örneğin hayatta kalma oranlarıyla belirli korelasyonlar hakkında.\n",
        "Sonra bu soruları, ilgili sayıları bularak teker teker yanıtla.\n",
        "Bu arada, matplotlib/seaborn kullanarak bazı grafikler çiz ve bunları (zaten mevcut olan) './figures/' klasörüne kaydet: Her grafiği çizmeden önce plt.clf() ile temizlemeyi unutma.\n",
        "\n",
        "Sonuçlarınızda: bu korelasyonları ve trendleri özetleyin.\n",
        "Her sayının ardından gerçek dünya içgörüleri çıkarın; örneğin: \"is_december ile boredness arasındaki korelasyon 1.3453'tür, bu da insanların kışın daha çok sıkıldığını gösterir.\"\n",
        "Sonuçlarınız en az 3 numaralı ve ayrıntılı parça içermelidir.\n",
        "\"\"\"\n",
        "analysis = agent.run(\n",
        "    \"\"\"You are an expert data analyst.\n",
        "Please load the source file and analyze its content.\n",
        "According to the variables you have, begin by listing 3 interesting questions that could be asked on this data, for instance about specific correlations with survival rate.\n",
        "Then answer these questions one by one, by finding the relevant numbers.\n",
        "Meanwhile, plot some figures using matplotlib/seaborn and save them to the (already existing) folder './figures/': take care to clear each figure with plt.clf() before doing another plot.\n",
        "\n",
        "In your final answer: summarize these correlations and trends\n",
        "After each number derive real worlds insights, for instance: \"Correlation between is_december and boredness is 1.3453, which suggest people are more bored in winter\".\n",
        "Your final answer should have at least 3 numbered and detailed parts.\n",
        "\"\"\",\n",
        "    additional_notes=additional_notes,\n",
        "    source_file=\"titanic/train.csv\",\n",
        ")"
      ],
      "metadata": {
        "id": "N_c5S8tm9BbJ"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "print(analysis)"
      ],
      "metadata": {
        "id": "WHRN66Yh9MOg"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "Etkileyici, değil mi? Ajanınıza kendi grafiklerini gözden geçirmesi için bir görselleştirme aracı da sağlayabilirsiniz!\n",
        "\n",
        "## Veri bilimi ajanı: Tahminleri çalıştır 🛠️👉\n",
        "**Modelimizin veriler üzerinde tahminler yapmasına izin vererek** bir adım daha ilerleyelim.\n",
        "\n",
        "Bunu yapmak için, `additional_authorized_imports` içinde `sklearn` kullanımına da izin veriyoruz."
      ],
      "metadata": {
        "id": "c7QrYCxR9aGE"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "agent = ReactCodeAgent(\n",
        "    tools=[],\n",
        "    llm_engine=llm_engine,\n",
        "    additional_authorized_imports=[\n",
        "        \"numpy\",\n",
        "        \"pandas\",\n",
        "        \"matplotlib.pyplot\",\n",
        "        \"seaborn\",\n",
        "        \"sklearn\",\n",
        "    ],\n",
        "    max_iterations=12,\n",
        ")\n",
        "\"\"\"\n",
        "Sen bir ML uzmanısın.\n",
        "Lütfen \"titanic/train.csv\" dosyası üzerinde hayatta kalmayı tahmin etmek için bir ML modeli eğit.\n",
        "Sonuçları './output.csv' dosyasına yaz.\n",
        "Kullanımdan önce fonksiyonları ve modülleri içe aktarmayı unutma!\n",
        "\"\"\"\n",
        "output = agent.run(\n",
        "    \"\"\"You are an expert machine learning engineer.\n",
        "Please train a ML model on \"titanic/train.csv\" to predict the survival for rows of \"titanic/test.csv\".\n",
        "Output the results under './output.csv'.\n",
        "Take care to import functions and modules before using them!\n",
        "\"\"\",\n",
        "    additional_notes=additional_notes + \"\\n\" + analysis,\n",
        ")"
      ],
      "metadata": {
        "id": "q2c7g4rr9yXH"
      },
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "Ajanımızın çıkardığı test çıktıları, Kaggle'a gönderildiğinde 0.78229 puan alıyor ve 17,360 sonuç arasından #2824 sıraya yerleşiyor.\n",
        "\n",
        "Bu sonuç, yazarın yıllar önce bu yarışmaya ilk girdiğinde elde ettiği sonuçtan çok daha iyi bir sonuçtur.\n",
        "\n",
        "Sonuçlarınız değişebilir, ancak yine de ajanın birkaç saniyede bu sonucu başarması gerçekten etkileyici.\n",
        "\n",
        "🚀 Veri analisti ajanı ile sadece basit bir deneme yaptık. Kullanım durumunuza daha iyi uyacak şekilde çok daha fazla geliştirebilirsiniz."
      ],
      "metadata": {
        "id": "DbkkLpf0-DQj"
      }
    }
  ]
}